package lib.bone.audit.flow.event;

import lib.bone.audit.workload.domain.NepuWorkload;
import lib.bone.flow.domain.dto.FlowParam;
import lib.bone.flow.domain.entity.FlowWork;

/**
 * @author kindear
 * @param <T> 数据类型
 * @param <V> 数据词典类型
 */
public interface EndEventService<T,V> {
    /**
     * 获取服务类型
     * @return
     */
    String getServiceType();

    /**
     * 构建流程参数
     * @param flowParam
     * @return
     */
    FlowParam buildFlowParam(FlowParam flowParam);

    /**
     * 构建写入工作量信息
     * @param flowParam
     * @param t
     * @param v
     * @return
     */
    NepuWorkload buildWorkload(FlowParam flowParam,T t,V v);

    /**
     * 获取词典信息
     * @param t
     * @return
     */
    V getDict(T t);

    /**
     * 获取实体信息
     * @param id
     * @return
     */
    T getEntity(String id);

    /**
     * 执行事件
     * @param flowWork
     * @param flowParam
     */
    void process(FlowWork flowWork,FlowParam flowParam);

    /**
     * 构建工作量附加信息
     * @param t
     * @return
     */
    String buildAttach(T t,V v);

}
